<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据类型和数据类型转换</title>
</head>
<body>
    <script>
        // ES5数据类型 分为两大类：基本类型 和 复杂类型
        // 基本类型 为以下五种
          // String
          // Number
          // Boolean
          // undefined
          // null
        // 复杂类型 
        // Object  ( Array 、 Date 、 RegExp )
        // function

        // ES6中增加一个类型
        // Symbol // 独一无二的类型
        var symbol1 = Symbol('foo')
        const symbol2 = Symbol()
        console.log(symbol1,'0000',typeof symbol2)
        // 独一无二
        console.log(Symbol('foo')===Symbol('foo'))  //  false  独一无二

        /* 
          小数减法不精确  l浏览器解析JS 超过16位
         */
         console.log(1.002-0.001)   // 1.0010000000000001

         /* 
            未定义 undefined
          */
        var a ;
        console.log(a)  // undefined
        // console.log(a2)  // 没有用 var let const 定义变量会报错

        /* 
            object 类型
         */
        var obj = {
            a:1,
            b:2, 
        }; 
        console.log(obj,obj.a,typeof obj)
        // 修改对象属性值 两种方法
        // obj.a = "hello"
        obj['a'] = "hello"

        // 
        var goods = {
            name:'超级3090',
            system:'window 11',
            price:10000,
            size:'1T'
        } 
        console.log(goods.name)
        goods.name = '没用电脑001'
        goods.price = 9000
        /* 
            获取对象属性的值的两种方法  方括号 需要给属性加  引号
        */
       /* 
        这种方法主要用途 
       */
      const s = 'price'
      console.log(goods[s],goods)
    //   使用 . 写法必须属性固定  使用 [] 写法属性可以是变量  可以把属性赋值给 不同的变量 进行变量调用方便

        function funs(){
            console.log('我是方法')
        } 
        console.log(typeof(funs),'00000000000000000000000',typeof null,typeof(null))
        console.log(funs instanceof Function,null===null,[] instanceof Array,[] instanceof Object)
        console.log('null' instanceof String)


// 类型 转换
/* 
        类型  
 */
 console.log(a,typeof(a))  // undefined 'undefined'
 console.log(typeof(d1))  // undefined 
 console.log(typeof(null))  // null的类型为对象类型  垃圾回收时把对象赋值为 null 
//   undefined  声明了变量 但未对变量进行赋值   

/* 
        转换
*/

/* 
三个强制转换
Number()
String()
Boolean() */
console.log(Number("a"))
// NAN 非数值 数值类型非数值
console.log(Number("4"),Number("4w"))  // 4,NAN
// 只要有字符存在 强制转换就变为 NAN 
console.log(Number(true),Number(null),Number(undefined))  // TRUE 1 false 0   undefined 为 NAN 强转 null 为 0
console.log(new Number(1222).toString(2))
   </script>
    <script>
        /* *
            3 
         */
    </script>
</body>
</html>